package cn.itcast.item.web;

import cn.itcast.hmall.dto.common.PageDTO;
import cn.itcast.hmall.dto.common.ResultDTO;
import cn.itcast.hmall.dto.item.SearchItemDTO;
import cn.itcast.hmall.pojo.item.Item;
import cn.itcast.item.service.ItemService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
@RequestMapping("item")
public class ItemController {
    @Autowired
    private ItemService itemService;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    // 根据id查询
    @GetMapping("/{id}")
    public Item queryById(@PathVariable("id") Long id) {
        return itemService.getById(id);
    }

    // 分页查询
    @PostMapping("/list")
    public PageDTO<Item> itemPageDTO(@RequestBody SearchItemDTO searchItemDTO) {
        return itemService.queryItemByPage(searchItemDTO);
    }

    // 新增商品
    @PostMapping
    public ResultDTO addItem(@RequestBody Item item) {
        item.setCreateTime(new Date());
        item.setUpdateTime(new Date());
        boolean save = itemService.save(item);
        if (save) {
            return ResultDTO.ok(item);
        }
        return ResultDTO.error();
    }

    // 商品上下架
    @PutMapping("/status/{id}/{status}")
    public ResultDTO updateItemStatus(@PathVariable("id") Long id,@PathVariable("status") int status) {
        Item item = itemService.getById(id);
        item.setStatus(status);
        LambdaQueryWrapper<Item> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(Item::getId, item.getId());
        boolean update = itemService.update(item, wrapper);
        if(update){
            return ResultDTO.ok();
        }
        return ResultDTO.error();
    }

    // 修改商品
    @PutMapping
    public ResultDTO updateItem(@RequestBody Item item) {
        LambdaUpdateWrapper<Item> wrapper = Wrappers.<Item>lambdaUpdate();
        wrapper.eq(Item::getId, item.getId());
        boolean update = itemService.update(item, wrapper);
        if (update) {
            return ResultDTO.ok();
        }
        return ResultDTO.error();
    }

    // 根据id删除商品
    @DeleteMapping("{id}")
    public ResultDTO deleteItemById(@PathVariable("id") Long id) {
        boolean b = itemService.removeById(id);
        if (b) {
            return ResultDTO.ok();
        }
        return ResultDTO.error();
    }
}

